
        <html>
			<head>
			     <title>GNU/Linux安全基线与加固-0.1 - insight-labs</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/tips/2621">http://drops.wooyun.org/tips/2621</a></h1>
				
      <p>
        <p><strong>from:https://raw.githubusercontent.com/citypw/DNFWAH/master/4/d4&#95;0x02&#95;DNFWAH&#95;gnu-linux&#95;security&#95;baseline&#95;hardening.txt</strong></p>

<p>By Shawn</p>

<h2>0x00 关于这份文档</h2>

<hr />

<p>随着GNU/Linux在各个行业的IT基础架构中的普及，安全问题也成为了关注的焦点， GNU/Linux主要是由GNU核心组建( 编译器GCC, C库Glibc等)和Linux内核组合而成， 在自由开源软件统治着基础平台的大环境下，不少人认为开源一定是安全的，这 是一种不完全正确的观念，Coverity的报告只是说明了开源比闭源更安全，这并 不代表自由开源软件就是牢不可破的，自由开源软件在一定程度上具有一些安全 的特性，这些特性不一定在GNU/Linux发行版中是默认开启，这些特性中有一些是 必须在安全基线中去部署的，有一些可以根据具体需求来定制，这篇文档主要是 介绍一些关于安全基线建设和加固的基本内容。</p>

<p>在实际的安全咨询工作中，很多普通个人用户和企业用户并不是安全领域的黑客， 大多客户都会要求给出一份简单易懂的部署文档，也就是所谓的安全基线，基线 和加固是很大的话题，我会尽力不断更新这篇文档的内容，也希望有社区的朋友 参与，本文所使用的GNU/Linux发行版是Debian。</p>

<!--more-->

<h2>0x01 安全基线</h2>

<hr />

<p>在遵循最小安装和最小权限的部署原则下，还有一些地方是需要注意的，我们把 这些部分称为安全基线。</p>

<p><strong>1.1 安全修复更新</strong></p>

<p>作为系统管理员，每天干的第1件事情就应该是查看生产环境的机器是否有安全修 复的更新，甚至应该除了生产环境再另外跑一套模拟环境，用于测试升级后是否 影响业务系统。</p>

<p>Debian检查需要安全修复包：</p>

<pre><code>sudo apt-get upgrade -s | grep -i security
</code></pre>

<p>OpenSuSE发行版检查需要安全修复的包：</p>

<pre><code>sudo zypper lp | awk '{ if ($7=="security"){ if ($11=="update") {print $13} else{ print $11 }}}' | sed 's/:$//' | grep -v "^$" | sort | uniq
</code></pre>

<p><strong>1.2 密码策略</strong></p>

<p>root密码策略至少应该考虑以下几点：</p>

<p>1，密码强度，至少是字母+数字一共9位以上</p>

<p>2，不同的系统密码不能一样</p>

<p>3，根换密码策略(每90天更换一次）</p>

<p>4，密码分发管理，管理不同业务服务器的系统管理员掌握不同的密码</p>

<p><strong>1.2.1 业务分离</strong></p>

<p>生产环境中,不同的业务可以做水平分离,比如把不同的服务运行到不同的虚拟机 中,不需要远程访问的服务器可以绑定到 localhost( 比如只需要访问本机业务的 mysql) 上。</p>

<p><strong>1.3 SSH安全配置</strong></p>

<p>openssh目前的默认配置文件相比以前虽然要安全的多，但还是有必要对生产系统 中的ssh服务器进行基线检查。</p>

<h2>配置文件：<code>/etc/ssh/ssh_config</code></h2>

<p>1，known_hosts保存相关服务器的签名，所以必须把主机名hash:</p>

<pre><code>HashKnownHosts yes
</code></pre>

<p>2，SSH协议v1不安全：</p>

<pre><code>Protocol 2
</code></pre>

<p>3，如果没用X11转发的情况：</p>

<pre><code>X11Forwarding no
</code></pre>

<p>4，关闭rhosts:</p>

<pre><code>IgnoreRhosts yes
</code></pre>

<p>5，关闭允许空密码登录：</p>

<pre><code>PermitEmptyPasswords no
</code></pre>

<p>6，最多登录尝试次数：</p>

<pre><code>MaxAuthTries 5
</code></pre>

<p>7，禁止root登录</p>

<pre><code>PermitRootLogin no
</code></pre>

<hr />

<h2>(可选)</h2>

<p>1，关闭密码认证，启用公钥认证：</p>

<pre><code>PubkeyAuthentication yes

PasswordAuthentication no
</code></pre>

<p>2，允许或者禁止用户/组登录:</p>

<h2>AllowGroups, AllowUsers, DenyUsers, DenyGroups</h2>

<p><strong>1.4 auditd审计框架</strong></p>

<p>auditd是接收内核审计模块关于系统调用信息的一个用户态程序，可以通过一些 规则来对一些系统调用或者文件目录进行监控。</p>

<p>安装auditd:</p>

<pre><code>sudo apt-get install auditd
</code></pre>

<p>配置文件:<code>/etc/audit/auditd.conf</code></p>

<p>存储地址<code>log_file = /var/log/audit/audit.log</code></p>

<h2>审计规则的配置文件：<code>/etc/audit/audit.rules</code>，这里给出一个例子：</h2>

<pre><code># First rule - delete all
-D

# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 320
-a always,exit -S adjtimex -S settimeofday -S stime -k time-change
-a always,exit -S clock_settime -k time-change
-a always,exit -S sethostname -S setdomainname -k system-locale
-w /etc/group -p wa -k identity
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k identity
-w /var/run/utmp -p wa -k session
-w /var/log/wtmp -p wa -k session
-w /var/log/btmp -p wa -k session
-w /etc/apparmor -p wa -k MAC-policy
-w /etc/apparmor.d -p wa -k MAC-policy
</code></pre>

<hr />

<p>上面的例子对一系列关于时间的系统调用进行了监控，一旦时间出现改变就会记 录进如日志，之后对几个跟创建/删除用户和组的文件也进行了监控，最后是对 apparmor的配置文件和规则目录进行监控。在/etc/apparmor下的shell中输入：</p>

<pre><code>sudo touch hello
</code></pre>

<p>用工具ausearch来进行查询：</p>

<hr />

<pre><code>sudo ausearch -i -k MAC-policy
</code></pre>

<hr />

<pre><code>type=CONFIG_CHANGE msg=audit(07/20/2014 20:36:48.397:58) : auid=root ses=2 op="add rule" key=MAC-policy list=exit res=1 
</code></pre>

<hr />

<pre><code>type=CONFIG_CHANGE msg=audit(07/20/2014 20:36:48.445:59) : auid=root ses=2 op="add rule" key=MAC-policy list=exit res=1 
</code></pre>

<hr />

<pre><code>type=PATH msg=audit(07/20/2014 20:38:42.717:61) : item=1 name=hello inode=799889 dev=08:01 mode=file,644 ouid=root ogid=root rdev=00:00 nametype=CREATE 
type=PATH msg=audit(07/20/2014 20:38:42.717:61) : item=0 name=/etc/apparmor inode=783766 dev=08:01 mode=dir,755 ouid=root ogid=root rdev=00:00 nametype=PARENT 
type=CWD msg=audit(07/20/2014 20:38:42.717:61) :  cwd=/etc/apparmor 
type=SYSCALL msg=audit(07/20/2014 20:38:42.717:61) : arch=i386 syscall=open success=yes exit=3 a0=bfeca8ab a1=8941 a2=1b6 a3=1 items=2 ppid=17704 pid=17876 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=2 comm=touch exe=/bin/touch key=MAC-policy 
</code></pre>

<hr />

<pre><code>type=PATH msg=audit(07/20/2014 20:38:56.017:62) : item=1 name=hello inode=799889 dev=08:01 mode=file,644 ouid=root ogid=root rdev=00:00 nametype=DELETE 
type=PATH msg=audit(07/20/2014 20:38:56.017:62) : item=0 name=/etc/apparmor inode=783766 dev=08:01 mode=dir,755 ouid=root ogid=root rdev=00:00 nametype=PARENT 
type=CWD msg=audit(07/20/2014 20:38:56.017:62) :  cwd=/etc/apparmor 
type=SYSCALL msg=audit(07/20/2014 20:38:56.017:62) : arch=i386 syscall=unlinkat success=yes exit=0 a0=ffffff9c a1=89eb8c0 a2=0 a3=0 items=2 ppid=17704 pid=17889 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts1 ses=2 comm=rm exe=/bin/rm key=MAC-policy 
</code></pre>

<hr />

<p>也可以使用aureport来生成报告。</p>

<p><strong>1.4.1 针对文件的审计</strong></p>

<h2>1, Leo Juranic的详细的分析[]了异常的通配符威胁有多大，：</h2>

<pre><code>find / -path /proc -prune  -name "-*"
</code></pre>

<hr />

<h2>2, 所谓的world-writable权限的文件是不太合理的，所以这种文件我们必须得提防：</h2>

<pre><code>find / -path /proc -prune -o -perm -2 ! -type l -ls
</code></pre>

<hr />

<p>3, 一个没有owner的文件是存在潜在威胁的，因为你永远也不知道未来某个时候她的</p>

<h2>uid/gid成为了你的敌人：</h2>

<pre><code>find / -path /proc -prune -o -nouser -o -nogroup
</code></pre>

<hr />

<h2>4, 作为"自主可控"的自由软件用户，你得知道你的生产环境中哪些用户是可用的：</h2>

<pre><code>egrep -v '.*:\*|:\!' /etc/shadow | awk -F: '{print $1}'
</code></pre>

<hr />

<p>5, 你要删除一个用户前，应该先了解一些有哪些文件是他拥有的： &#45;--||||&#45;--||||&#45;--||||&#45;--||||&#45;--||||&#45;--||||&#45;--||||&#45;--||||&#45;--||||&#45;--||||&#45;--||||&#45;--||||&#45;--||||&#45;--||||&#45;--||||&#45;--||||&#45;--||||&#45;--||||&#45;--||||&#45;--||||--x</p>

<pre><code>find / -path /proc -prune -o -user account -ls
</code></pre>

<p>然后，安全的删除：</p>

<pre><code>userdel -r account
</code></pre>

<hr />

<h2>6, 如果不带':x:'的用户肯定是无法正常使用的：</h2>

<pre><code>grep -v ':x:' /etc/passwd
</code></pre>

<hr />

<h2>7, /boot目录权限下至少是644，甚至是600:</h2>

<pre><code>ls -l /boot
</code></pre>

<hr />

<p>(可选)</p>

<p>1, GNU/Linux的访问控制列表(ACL)也是不错的文件权限管理的途径，获得文件</p>

<h2>ACL的信息：</h2>

<pre><code>getfacl file
</code></pre>

<p>设置哪些用户对哪些文件有什么样的权限：</p>

<h2>setfacl -m u:user:r file</h2>

<h2>0x02 内核安全基线</h2>

<hr />

<h2>SYN cookies防护主要是为了防止SYN洪水攻击，开启设置为1：</h2>

<pre><code>net.ipv4.tcp_syncookies = 1
/proc/sys/net/ipv4/tcp_syncookies
</code></pre>

<p>(可选)，如果需要开启SYNPROXY可以直接：</p>

<pre><code>iptables -t raw -A PREROUTING -i eth0 -p tcp --dport 80 --syn -j NOTRACK
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state UNTRACKED,INVALID \
     -j SYNPROXY --sack-perm --timestamp --mss 1480 --wscale 7 --ecn

echo 0 &gt; /proc/sys/net/netfilter/nf_conntrack_tcp_loose
</code></pre>

<h2>注意:SYNPROXY是在3.13里加入的NETFILTER特性。</h2>

<p>源路由通常可以用于在IP包的OPTION里设置途经的部分或者全部路由器，这个 特性可以用于网络排错和优化，比如traceroute，攻击者也可以使用这个特性来</p>

<h2>进行IP欺骗，关闭设置为0：</h2>

<pre><code>net.ipv4.conf.all.accept_source_route = 0
/proc/sys/net/ipv4/conf/all/accept_source_route
</code></pre>

<hr />

<p>ICMP重定向，正常用于选择最优路径，攻击者可以利用开展中间人攻击，关闭设</p>

<h2>置为0:</h2>

<pre><code>net.ipv4.conf.all.accept_redirects = 0
/proc/sys/net/ipv4/conf/all/accept_redirects
</code></pre>

<hr />

<h2>IP欺骗防护，启动设置为1：</h2>

<pre><code>net.ipv4.conf.all.rp_filter = 1
/proc/sys/net/ipv4/conf/all/rp_filter
</code></pre>

<hr />

<h2>忽略ICMP请求( PING)，启动设置为1：</h2>

<pre><code>net.ipv4.icmp_echo_ignore_all = 1
/proc/sys/net/ipv4/icmp_echo_ignore_all
</code></pre>

<hr />

<h2>忽略ICMP广播请求，启动设置为1：</h2>

<pre><code>net.ipv4.icmp_echo_ignore_broadcasts = 1
/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
</code></pre>

<hr />

<h2>错误消息防护，会警告你关于网络中的ICMP异常，启动设置为1：</h2>

<pre><code>net.ipv4.icmp_ignore_bogus_error_responses = 1
/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
</code></pre>

<hr />

<h2>对特定packet(IP欺骗，源路由，重定向）进行审计，启动设置为1：</h2>

<pre><code>/proc/sys/net/ipv4/conf/all/log_martians
net.ipv4.conf.all.log_martians = 1
</code></pre>

<hr />

<h2>地址随机化，启动设置为2：</h2>

<pre><code>kernel.randomize_va_space=2
/proc/sys/kernel/randomize_va_space
</code></pre>

<hr />

<h2>内核符号限制访问，启动设置为1：</h2>

<pre><code>kernel.kptr_restrict=1
/proc/sys/kernel/kptr_restrict
</code></pre>

<h2>类似CVE-2014-0196的exploit对于这一项就很难做到“通杀”;-)</h2>

<h2>内存映射最小地址，启动设置为65536：</h2>

<pre><code>vm/mmap_min_addr=65536
/proc/sys/vm/mmap_min_addr
</code></pre>

<hr />

<p><strong>Apparmor</strong></p>

<p>安装Apparmor和社区规则：</p>

<pre><code>sudo apt-get install -y apparmor-profiles apparmor
</code></pre>

<p>查看状态是否运行正常：</p>

<pre><code>sudo aa-status
</code></pre>

<hr />

<h2>0x03 加固</h2>

<hr />

<p>安全基线是在防御已知的威胁，而加固则是侧重于防御未知的威胁，加固的主要 目的是增加攻击者的成本。</p>

<p><strong>3.1 内核加固 - Grsecurity/PaX</strong></p>

<p>GNU/Linux平台从用户空间到内核空间都有一系列的加固措施，但是,对于真正面 临复杂安全环境,确实需要高级安全防护能力的机构,最极端的加固防御是: Grsecurity/PaX，对于注重完美的“老派( old school )”黑客社区而言,没有 Grsecurity/PaX 的定制方案是不完美的 ,这里摘选几段old school社区的调侃：</p>

<blockquote>
  <p>"The "better than none" point of view is actually a nice way to false sense of security for those who don't know better. We got better-than-none apparmor, selinux, tomoyo, some poorly maintained and crippled ports of grsec features or alikes, namespaces and containers, rootkit-friendly LSM, the dumb and useless kernel version of SSP, etc. What's the sum of all this shit for end users? False sense of security..."</p>
  
  <p>"without Grsecurity/PaX, linux security is like monkey can never perform a regular masturbation cu'z lacking of giant pennis;-)"</p>
</blockquote>

<p>作为个人完全赞同以上观点，太多的better-than-none可以算是"甜点"，用户使 用后会觉得自high的很爽，但是到了夜幕降临的时候，用户还是很难入睡，因为 "痛点"依然在那里，在安全领域，"甜点"就是"安全感"，安全感绝对不等同于安 全。</p>

<p>Anyway，对于商业客户而言，是否对Grsecurity/PaX定制是一种选择。</p>

<h2>安装新的带Grsecurity/PaX补丁的内核，以3.14.1为例，先下载原生内核：</h2>

<p>https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.14.1.tar.xz</p>

<p>下载Grsecurity/PaX补丁： https://github.com/citypw/citypw-SCFE/raw/master/security/apparmor_test/grsecurity-3.0-3.14.11-201407072045.patch</p>

<p>解压内核然后打补丁：</p>

<pre><code>Patch the kernel with grsecurity:
xz -d linux-3.14.1.tar.xz
tar xvf linux-3.14.1.tar
cd linux-3.14.1/
patch -p1 &lt; ../grsecurity-3.0-3.14.3-201405121814.patch
</code></pre>

<p>你可以在"make menuconfig"里自己定制符合你口味的内核，也可以使用我测试用 的内核config文件： https://raw.githubusercontent.com/citypw/citypw-SCFE/master/security/apparmor_test/debian-7.4-linux-3.14.1-grsec.config</p>

<p>编译内核(-jx, x通常==你的CPU核数+1):</p>

<pre><code>make -j7 deb-pkg
</code></pre>

<p>安装编译后的内核:</p>

<pre><code>dpkg -i ../*.deb
</code></pre>

<hr />

<p>现在内核的部分结束，关于RBAC规则可以使用用户态工具gradm的Learning Mode 来实现，但不在本文的讨论范畴。</p>

<p><strong>3.2 PHP加固</strong></p>

<p>1, PHP是常用的WEB开发语言，在WEB生产环境部署的过程中，目录和文件的权限是需 要关注的，通常除了少数用途的目录（比如上传）外，都应该把写入权限禁用：</p>

<hr />

<pre><code>find -type f -name \*.php -exec chmod 444 {} \;
find -type d -exec chmod 555 {} \;
</code></pre>

<hr />

<p>2, 开启 php 的安全模式,禁用 php 不安全的函数等加固，修改 php 配置文件 /etc/php5/apache2/php.ini :</p>

<hr />

<p>// 设置模式为安全模式,此值直接影响 disable_functions 的命令是否生效; [SQL]</p>

<pre><code>; http://php.net/sql.safe-mode

sql.safe_mode = On
</code></pre>

<p>// 禁用不安全的函数</p>

<pre><code>disable_functions = system, show_source, symlink, exec, dl, shell_exec,
passthru, phpinfo, escapeshellarg, escapeshellcmd
</code></pre>

<p>// 避免暴露 php 信息</p>

<pre><code>expose_php = Off
</code></pre>

<p>// 关闭错误信息提示</p>

<pre><code>display_errors = Off
</code></pre>

<p>// 不允许调用 dl</p>

<pre><code>enable_dl = Off
</code></pre>

<p>// 避免远程调用文件</p>

<pre><code>allow_url_include = Off
</code></pre>

<hr />

<p>0x04 Reference</p>

<hr />

<p>[1] 开源闭源项目代码质量对比 http://www.solidot.org/story?sid=39173</p>

<p>[2] Back To The Future: Unix Wildcards Gone Wild http://www.defensecode.com/public/DefenseCode&#95;Unix&#95;WildCards&#95;Gone&#95;Wild.txt</p>

<p>[3] SYNPROXY：廉价的抗DoS攻击方案 www.solidot.org/story?sid=38791</p>

<p>[4] INTERNET PROTOCOL http://tools.ietf.org/html/rfc791</p>

<p>[5] A simple TCP spoofing attack http://www.citi.umich.edu/u/provos/papers/secnet-spoof.txt</p>

<p>[6] ICMP Attacks Illustrated http://www.sans.org/reading-room/whitepapers/threats/icmp-attacks-illustrated-477</p>

<p>[7] SUSE Linux Enterprise Server 11 SP3 - Security and Hardening https://www.suse.com/documentation/sles11/singlehtml/book&#95;hardening/book&#95;hardening.html</p>

<p>[8] Securing Debian Manual https://www.debian.org/doc/manuals/securing-debian-howto/</p>

<p>[9] A Brief Introduction to auditd http://security.blogoverflow.com/2013/01/a-brief-introduction-to-auditd/</p>

<p>[10] Apparmor RBAC http://wiki.apparmor.net/index.php/Pam&#95;apparmor&#95;example</p>

<p>[11] Hardening PHP from php.ini http://www.madirish.net/199</p>

<p>[12] CVE-2014-0196 exploit http://bugfuzz.com/stuff/cve-2014-0196-md.c</p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          